package com.zyx.pulsardemo.functions.sdk;

import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;

import java.util.Optional;
import java.util.regex.Pattern;

/**
 * @author Yaxi.Zhang
 * @since 2021/10/8 18:06
 * desc: 个基于用户定义的正则表达式过滤事件
 */
public class RegexMatcherFunction implements Function<String, String> {

    public static final String REGEX_CONFIG = "regex-pattern";

    @Override
    public String process(String input, Context ctx) throws Exception {

        // 从用户提供的配置中检索正则表达式模式
        Optional<Object> config = ctx.getUserConfigValue(REGEX_CONFIG);

        if (config.isPresent() &&
                // 如果提供了正则表达式字符串, 则编译该正则表达式
                config.get().getClass().getName().equals(String.class.getName())) {
            Pattern pattern = Pattern.compile(config.get().toString());
            // 如果输入匹配正则表达式, 则允许它通过
            if (pattern.matcher(input).matches()) {
                String metricName =
                        String.format("function-%s-regex-matches", ctx.getFunctionName());
                ctx.recordMetric(metricName, 1);
            }
        }
        return null;
    }
}
